package editorsvg.propiedades;

import editorsvg.editor.documento.Transformacion;
import editorsvg.gui.generico.DialogoAceptarCancelar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;

/**
 * Propiedad que contiene un objeto string
 *
 * @author Jorge Berjano
 */
public class PropiedadTransformacion extends Propiedad {       
    protected JButton botonEdicion;
    
    /** Constructor por defecto */
    public PropiedadTransformacion() {        
    }
    
    public PropiedadTransformacion(Object objeto, String nombre) {
        super(objeto, nombre, nombre);
    }
    
    public PropiedadTransformacion(Object objeto, String nombre, String alias) {
        super(objeto, nombre, alias);
    }
    
    @Override
    public Class getClase() {
        return Transformacion.class;
    }
    
    public Transformacion obtenerTransformacion() {
        Object valor = getValor();
        if (valor instanceof Transformacion)
            return (Transformacion) valor;
        else
            return new Transformacion();
    }

//    public void asignarTransformacion(Transformacion transformacion) {
//        setValor(transformacion);
//    }
 
    @Override
    public JComponent obtenerComponenteModificacion() {
        if (botonEdicion == null) {
            botonEdicion = new JButton("...");
            botonEdicion.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent evento) {
                    botonPulsado(evento);
                }
                
            });
        }
        return botonEdicion;
    }
    
    // Si se pulsa el botón se muestra un menu contextual con las opciones
    private void botonPulsado(ActionEvent evento) {
        DialogoAceptarCancelar dlg = new DialogoAceptarCancelar(null, getAlias());
        PanelEdicionTexto panelEdicionTexto = new PanelEdicionTexto();
        
        Transformacion transformacion = obtenerTransformacion();         
        panelEdicionTexto.setTexto(transformacion.toString());

        dlg.setPanelInterior(panelEdicionTexto);
        dlg.setVisible(true);
        if (dlg.getResultado() == DialogoAceptarCancelar.ACEPTAR) {
            parsearPropiedad(panelEdicionTexto.getTexto());
        }
    }

    @Override
    public boolean permitirEditarTexto() {
        return false;
    }

    @Override
    public boolean parsearPropiedad(String valorString) {
        if (valorString == null || valorString.isEmpty()) {
            setValor(new Transformacion());
        } else {
            setValor(new Transformacion(valorString));
        }
        return true;
    }
}
